package com.dp.client.views.paquete;

import java.util.Date;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.dp.client.dto.AlmacenDTO;
import com.dp.client.servicios.almacenes.IServiciosAlmacen;
import com.dp.client.servicios.almacenes.IServiciosAlmacenAsync;
import com.dp.client.servicios.simulacion.IServiciosSimulacion;
import com.dp.client.servicios.simulacion.IServiciosSimulacionAsync;
import com.dp.client.util.Alerts;
import com.dp.client.views.Geografico;
import com.dp.client.views.clientes.WizardStage;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;

public class DestinoPaquete extends Composite implements WizardStage{
	private VerticalPanel verticalPanel;
	private Geografico geografico;
	private AlmacenDTO almacenSeleccionado;
	private FlexTable flexTable;
	private Label lblCapacidad;
	private Label lblCapacidadMxima;
	private Label lblDescripcion;
	private DatosEnvioPaquete datosPaquete;
	private Label lblCapacidadActual;
	private Label lblDisponible;
	
	public DestinoPaquete(DatosEnvioPaquete datos) {
		datosPaquete=datos;
		verticalPanel = new VerticalPanel();
		initWidget(verticalPanel);
		verticalPanel.setSize("auto", "auto");
		
		geografico = new Geografico(0);
		
		verticalPanel.add(geografico);
		geografico.setSize("auto", "auto");
		
		flexTable = new FlexTable();
		flexTable.setVisible(false);
		verticalPanel.add(flexTable);
		flexTable.setSize("auto", "auto");
		
		Label lblAlmacen = new Label("Almacen :");
		flexTable.setWidget(0, 0, lblAlmacen);
		
		lblDescripcion = new Label("");
		flexTable.setWidget(0, 2, lblDescripcion);
		
		lblCapacidadMxima = new Label("Capacidad m\u00E1xima :");
		flexTable.setWidget(1, 0, lblCapacidadMxima);
		
		lblCapacidad = new Label("");
		flexTable.setWidget(1, 2, lblCapacidad);
		flexTable.getCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_LEFT);
		
		lblCapacidadActual = new Label("Capacidad disponible:");
		flexTable.setWidget(2, 0, lblCapacidadActual);
		
		lblDisponible = new Label("");
		flexTable.setWidget(2, 1, lblDisponible);
		geografico.setStage(this);
	}

	@Override
	public boolean isValid() {
		return geografico.getIdCiudad()>0;
	}

	@Override
	public String getError() {
		return "Debe seleccionar una ciudad de destino";
	}

	@Override
	public void clear() {
		geografico.llenarComboContinente();
		ocultarInfoAlmacen();
	}

	@Override
	public Widget getWidget(){
		return this;
	}
	public void llenarAlmacen(){
		IServiciosAlmacenAsync serviciosAlmacen = GWT.create(IServiciosAlmacen.class);
		serviciosAlmacen.getAlmacenByCiudad(geografico.getIdCiudad()+"",new AsyncCallback<AlmacenDTO>(){
			@Override
			public void onSuccess(AlmacenDTO result) {
				datosPaquete.setDestino(result);
				//almacenSeleccionado=result;
				lblDescripcion.setText(result.getDescripcion());
				lblCapacidad.setText(result.getCapacidadMaxima()+"");
				
				IServiciosSimulacionAsync serviciosSimulacion = GWT.create(IServiciosSimulacion.class);
				serviciosSimulacion.getCapacidadDisponibleAlmacenEnFecha(result.getDescripcion(), new Date(), new AsyncCallback<Integer>() {
					
					@Override
					public void onSuccess(Integer result) {
						lblDisponible.setText("" + result);
					}
					
					@Override
					public void onFailure(Throwable caught) {
						Alerts.dialogErrorConexion();
						lblDisponible.setText("0");
					}
				});
				flexTable.setVisible(true);
			}
			@Override
			public void onFailure(Throwable caught) {
				Alerts.dialogErrorConexion();
			}
		});
		
		return;
	}
	public void ocultarInfoAlmacen(){
		flexTable.setVisible(false);
	}
	public int getIdCiudad(){
		return geografico.getIdCiudad();
	}
	public AlmacenDTO getAlmacen(){
		if (almacenSeleccionado == null)
			System.out.println("alacen destino nulo");
		return almacenSeleccionado;
		
	}

	public void setIdAlmacen(int id) {
		geografico.setIdAlmacen(id);
	}

	@Override
	public void actualizar() {
		// TODO Auto-generated method stub
		return;
	}
}
